#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 按要求使用推导式完成以下1-9各题目，没有使用推导式不得分。，以下各小题每题目10分
# num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,4, 5，-2，443，22，204，-3，99]
# set_a = ['abc', 'cfruits', 'xy', 'com', 'org', 'zzc']
# fruits = {'apple': 10, 'banumanuma': 34,'pear': 29,'watermelonum': 29,'oranumge': 39 }
# 1)生成新列表要求把列表num中的每个值乘以5
#[x * 5 for x in num] 
# 2)生成新列表要求把列表num中大于5的数过滤掉
[x for x in num if x <= 5]
# 3)生成新列表要求返回列表num中所有正数且能被9整除的数
[x for x in num if x > 0 and x % 9 == 0]
# 4)生成新列表要求过滤掉set_a列表中长度小于3的字符串，并返回每项的前两个字符
[x[:2] for x in set_a if len(x) < 3]
# 5)生成新字典将fruits字典中的key和value对调
{v:k for k, v in fruits.items()}
# 6)生成新字典将fruits字典中的key进行翻转，值保持不变
{k[::-1]: v for k, v in fruits.items()}
# 7)生成新字典将fruits字典中值大于30的键值对返回
{k: v for k, v in fruits.items() if v > 30}
# 8)生成新集合数据为num列表中每项数据的平方
{x**2 for x in num}
# 9)生成新集合数据为set_a列表中每项数据的最后一个字符
{x[-1] for x in set_a}
# 10)计算斐波拉契数列第50项的数字，要求使用生成器计算
def fib():
    a, b = 0, 1
    for i in range(49):
       yield b
       a, b = b, a+b 
    return b

print(fib())
